[WWDC18][iOS 12] NLTokenizerを使用して文章から単語を取り出す #WWDC18
はじめに
こんにちは。モバイルアプリサービス部の平屋です。
本記事では、iOS 12で追加されたNatural Language frameworkのNLTokenizerを使用して文章から単語を取り出す実装を紹介します。
本記事は Apple からベータ版として公開されているドキュメントを情報源としています。 そのため、正式版と異なる情報になる可能性があります。ご留意の上、お読みください。
検証環境
本記事は以下の環境で検証を行っています。
- macOS Sierra 10.13.5
- Xcode Version 10.0 beta 2 (10L177m)
- iOS Deployment target: 12.0
Natural Language framework
Natural Language frameworkは、以下のようなタスクを実行するためのフレームワークです。
- 言語認識
- トークンへの分解
- 見出語解析
- 品詞タグ付け
- 固有表現認識
また、Create MLと併用すれば、カスタム自然言語モデルの訓練/配置を行うことができます。
英語の文章から単語を取り出す
NLTokenizerインスタンスの作成/テキスト設定を行い、enumerateTokens(in:using:)
メソッドを呼びます。
let text = "Use the Natural Language framework to perform tasks like language and script identification, tokenization, lemmatization, parts-of-speech tagging, and named entity recognition." // 1. 単位としてwordを指定してNLTokenizerインスタンスを作成する let wordTokenizer = NLTokenizer(unit: .word) // 2. テキストを設定する wordTokenizer.string = text // 3. enumerateTokens(in:using:)メソッドを使用して単語を列挙する wordTokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { tokenRange, _ in // 4. 取り出した単語をprintする print(text[tokenRange]) return true }
上記サンプルコードを実行すると、以下の結果が得られました。
Use the Natural Language framework to perform tasks like language and script identification tokenization lemmatization parts of speech tagging and named entity recognition
日本語の文章から単語を取り出す
英語の場合と同様に、文章だけ変更して検証してみます。
let text = "Natural Languageフレームワークは、言語やスクリプトの識別、トークン化、字形化、品詞タグ付け、名前付きエンティティ認識などのタスクを実行します。" let wordTokenizer = NLTokenizer(unit: .word) wordTokenizer.string = text wordTokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { tokenRange, _ in print( text[tokenRange]) return true }
上記サンプルコードを実行すると、以下の結果が得られました。
Natural Language フレームワーク は 言語 や スクリプト の 識別 トークン 化 字形 化 品詞 タグ 付け 名前 付き エンティティ 認識 など の タスク を 実行 し ます
列挙された単語は、Yahoo! JAPANが提供している日本語形態素解析 Web APIで得られるものとほぼ同様になりました。(日本語自動品詞分解ツールなどで試せます。)
さいごに
本記事では、NLTokenizerを使用して文章から単語を取り出す実装を紹介しました。
次の記事ではNLTaggerを使用して各単語の品詞を識別する実装を紹介します。